package src.dp.easy;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class no118 {//打印杨辉三角
    /**
     * 1. 确定dp数组下标含义：第 i 行第 j 列的元素值为 dp[i][j]
     * 2. 递推公式：dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j]
     * 3. 初始化数组：最左侧和最右侧为1，dp[i][0] = 1; dp[i][i] = 1;
     * 4. 遍历顺序：逐行遍历，从上到下
     */

    public List<List<Integer>> generate(int numRows) {
        Integer[][] dp = new Integer[numRows][];
        for (int i = 0; i < numRows; i++) {
            dp[i] = new Integer[i + 1];  //初始化当前行的大小，为行数+1的空间
            //每一行的第一个和最后一个元素总是 1
            dp[i][0] = 1;
            dp[i][i] = 1;

            for (int j = 1; j < i; j++) {
                dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
            }
        }

        List<List<Integer>> res = new ArrayList<>();
        if (numRows == 0) {
            return res;
        }
        //将dp数组转化为list，Arrays.asList方法
        for (Integer[] row : dp) {
            res.add(Arrays.asList(row));
        }
        return res;

    }

    //no119：返回杨辉三角的第 rowIndex 行
    public List<Integer> getRow(int rowIndex) {
        int[] dp = new int[rowIndex + 1];
        ArrayList<Integer> list = new ArrayList<>();

        for(int i=0; i<=rowIndex; i++){
            dp[0]=1;
            dp[i]=1;
            for(int j=1; j<i; j++){
                dp[j] = dp[j-1] + dp[j];
            }
        }
        for(int i=0;i<=rowIndex;i++){
            list.add(dp[i]);
        }
        return list;

    }

}
